<?php
/**
 * 缓存引擎接口
 *
 * @since 1.0
 * @package if
 * @subpackage module.cache
 */
interface ICacheEngine {
	/**
	 * 初始化
	 *
	 * @param array $settings 设置
	 * @return null
	 * @since 1.0
	 */
	function init(array $settings = null);
	
	/**
	 * 清空所有缓存
	 *
	 * @param boolean $expired 是否要判断是否过期
	 * @return boolean
	 * @since 1.0
	 */
	function clear($expired = false);
	
	/**
	 * 删除一个缓存
	 *
	 * @param string $key 键
	 * @return boolean
	 * @since 1.0
	 */
	function delete($key);
	
	/**
	 * 删除缓存中的TAG
	 *
	 * @param string|array $tag 一个或一组TAG（以空格或逗号或分号分隔）
	 * @return boolean
	 * @since 1.0.1
	 */
	function deleteTag($tag);
	
	/**
	 * 获取缓存的值
	 *
	 * @param string $key 键
	 * @return mixed
	 * @since 1.0
	 */
	function value($key);
	
	/**
	 * 读取cache值
	 * 
	 * 同value($key);
	 *
	 * @param string $key 键
	 * @return mixed
	 * @since 1.0.2
	 * @see value
	 */
	function read($key);	
	
	/**
	 * 获取缓存条目对象
	 *
	 * @param string $key 键
	 * @return ICacheEntry
	 * @since 1.0
	 */
	function entry($key);
	
	/**
	 * 写入缓存
	 *
	 * @param string $key 键
	 * @param string $value 值
	 * @param integer $ttl 刷新时间
	 * @param integer $maxAge 最大生存时间(时间戳）
	 * @return boolean
	 * @since 1.0
	 */
	function write($key, $value, $ttl = 3600, $maxAge = 0);
	
	/**
	 * 写入待TAG的缓存
	 *
	 * @param string|array $tags 一个数组或一个使用空格（或分号、逗号）隔开各个TAG的字符串
	 * @param string $key 键
	 * @param string $value 值
	 * @param integer $ttl 刷新时间
	 * @param integer $maxAge 最大生存时间(时间戳）
	 * @return boolean
	 * @since 1.0.1
	 */
	function writeWithTags($tags, $key, $value, $ttl = 3600, $maxAge = 0);
	
	/**
	 * 写入缓存条目
	 *
	 * @param ICacheEntry $entry 缓存条目
	 * @since 1.0.1
	 */
	function writeEntry(ICacheEntry $entry);
	
	/**
	 * 回收过期的缓存
	 *
	 * @return boolean
	 * @since 1.0
	 */
	function gc();
}

?>